"""
安装flask： pip install flask

运行  flask --app app run
debug 运行 flask --app app run --debug
"""

# 1. 导入 Flask 模块
from flask import Flask

from markupsafe import escape

# 2. 创建Flask应用程序实例
# __name__是一个适用于大多数情况的快捷方式，有了这个参数，Flask才能知道在哪里可以找到模板和静态文件

app = Flask(__name__)


# 3. 定义路由及视图函数
@app.route("/")
def hello_world():
    return "<p>Hello, flask</p>"


@app.route("/get", methods=["get"])
def get_case():
    return {
        "code": 0,
        "msg": "success"
    }


@app.route("/post", methods=["post"])
def post_case():
    return {
        "code": 0,
        "msg": "success"
    }


@app.route("/put", methods=["put"])
def put_case():
    return {
        "code": 0,
        "msg": "success"
    }


@app.route("/delete", methods=["delete"])
def delete_case():
    return {
        "code": 0,
        "msg": "success"
    }


"""
html转义，为防止注入攻击，所有用户提供的值在输出渲染前必须被转义。
escape()可以手动转义。

<variable_nmae>:在url中添加变量，标记的部分会作为关键字参数传递给函数
<converter:variable_name>:选择加上转换器，为变量指定规则。
"""

# @app.route("/<name>")
# def hello(name):
#     return f"hello,{escape(name)}"

#
# @app.route("/user/<username>")
# def show_user_profile(username):
#     return f"User {escape(username)}"


"""
string:(缺省值)接受任何不包含斜杠的文本
int:接受正整数
float:接受正浮点数
path:类型string，但可以包含斜杠
uuid:接受uuid字符串
"""

# 做了限制后，如果输入的是非数据，则会报错
# @app.route("/post/<int:post_id>")
# def show_subpart(post_id):
#     return f"User {escape(post_id)}"
#
#
# @app.route("/path/<path:subpath>")
# def show_subpath(subpath):
#     return f"subpaht{escape(subpath)}"


"""
url /重定向行为
以下2条规则的不同之处在于
如果在代码中加了/，那么在url中可加可不加
如果在代码中没有加/，url中不可以加
"""
#
#
# @app.route("/case/<int:name>")
# def show(name):
#     return f"{escape(name)}"
#
#
# if __name__ == '__main__':
#     app.run(debug=True,host="0.0.0.0",port=5000)

from flask import Flask
from flask_restx_demo import Resource, Api

app = Flask(__name__)
api = Api(app)


@api.route('/hello')
class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}


if __name__ == '__main__':
    app.run(debug=True)
